package 其他.Acwing;

import org.junit.Test;

import java.util.*;

import static MyUtils.MHUtils.*;
import static MyUtils.MHMoban.*;

/*
    每个节点只处理自己（单cur思想）
*/

class TreeVo{
    int id;
    List<TreeVo> childrenList = new ArrayList<>();
    boolean isYezi=false;
}
/*

8
1 -1
2 1
3 1
4 2
5 2
6 4
7 -1
8 -1

*/
public class Map递归 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<int[]> allCatalog = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            allCatalog.add(new int[]{sc.nextInt(), sc.nextInt()});
        }

        //Map反向插：父id 孩子id(这里val不用Vo，因为这里没法初始化，vo在递归中插入
        Map<Integer, List<Integer>> map = new HashMap<>();

        for (int i = 0; i < n; i++) {
            int[] ints = allCatalog.get(i);
            int fa = ints[1];
            if(!map.containsKey(fa)){
                map.put(fa,new ArrayList<>());
            }
            map.get(fa).add(ints[0]);
        }
        ma = map;
        TreeVo thisCatologTreeVo = back(1);
        System.out.println(1);
    }
    static Map<Integer, List<Integer>> ma;
    private static TreeVo back(int i) {
        can(String.format("i=%s", i));
        if(ma.get(i)==null){
            r("null");
            TreeVo vo = new TreeVo();
            vo.id=i;
            vo.isYezi=true;
            vo.childrenList=null;
            return vo;
        }

        TreeVo vo = new TreeVo();
        vo.id=i;

        for (int j = 0; j < ma.get(i).size(); j++) {
            vo.childrenList.add(back(ma.get(i).get(j)));
        }
        if(vo.childrenList.size()==0) vo.isYezi=true;
        r("vo");
        return vo;
    }
}
